package gestion.camping.vue;

import gestion.camping.controleur.PersonneController;
import gestion.camping.controleur.VisiteurController;
import gestion.camping.dto.Visiteur;
import gestion.camping.utils.MessagesUtil;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JScrollPane;

public class ViewVisiteurDetail extends JDialog implements ActionListener{
	/**
	 * 
	 */
	private static final long serialVersionUID = -17760458983364266L;

	
	private JButton btnEnregister;
	private JButton btnAnnuler;
	
	private List<Visiteur> listVisiteur;
	private VisiteurController controller;
	private PersonneController controllerPersonne;
	private ViewPersonneListe panelPersonne;

	private JButton btnRetourListe;
	private JButton btnMoins;
	private JButton btnPlus;
	private TableVisiteur table;


	/**
	 * Create the frame.
	 */
	public ViewVisiteurDetail(VisiteurController controller) {
	
		this.controller = controller; 
		
		
		controllerPersonne = new PersonneController(false);
		
		initCompoment();
		
		setListVisiteur(controller.getListVisiteur());
		
		setModal(true);
	}
	
	public void initCompoment(){
	
		
		setBounds(25, 25, 1150, 750);
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[]{0,0, 0, 0};
		gridBagLayout.rowHeights = new int[]{10, 250, 0, 100, 0, 0};
		gridBagLayout.columnWeights = new double[]{0.05, 0.45, 0.45, 0.05};
		gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
		getContentPane().setLayout(gridBagLayout);
		
		btnRetourListe = new JButton(MessagesUtil.formatMessage("visiteur.ajout.btn.retour"));
		btnRetourListe.addActionListener(this);
		GridBagConstraints gbc_btnRetourListe = new GridBagConstraints();
		gbc_btnRetourListe.anchor = GridBagConstraints.WEST;
		gbc_btnRetourListe.insets = new Insets(0, 0, 5, 5);
		gbc_btnRetourListe.gridx = 3;
		gbc_btnRetourListe.gridy = 0;
		getContentPane().add(btnRetourListe, gbc_btnRetourListe);
		
		panelPersonne = controllerPersonne.getViewListe();
		GridBagConstraints gbc_panel = new GridBagConstraints();
		gbc_panel.fill = GridBagConstraints.BOTH;
		gbc_panel.insets = new Insets(0, 0, 5, 5);
		gbc_panel.gridx = 0;
		gbc_panel.gridy = 1;
		gbc_panel.gridwidth=4;
		getContentPane().add(panelPersonne, gbc_panel);
		
		btnPlus = new JButton(MessagesUtil.formatMessage("visiteur.ajout.btn.plus"));
		btnPlus.addActionListener(this);
		GridBagConstraints gbc_btnPlus = new GridBagConstraints();
		gbc_btnPlus.anchor = GridBagConstraints.EAST;
		gbc_btnPlus.insets = new Insets(0, 0, 5, 5);
		gbc_btnPlus.gridx = 1;
		gbc_btnPlus.gridy = 2;
		getContentPane().add(btnPlus, gbc_btnPlus);
		
		btnMoins = new JButton(MessagesUtil.formatMessage("visiteur.ajout.btn.moins"));
		btnMoins.addActionListener(this);
		GridBagConstraints gbc_btnMoins = new GridBagConstraints();
		gbc_btnMoins.anchor = GridBagConstraints.WEST;
		gbc_btnMoins.insets = new Insets(0, 0, 5, 5);
		gbc_btnMoins.gridx = 2;
		gbc_btnMoins.gridy = 2;
		getContentPane().add(btnMoins, gbc_btnMoins);
		
		table = new TableVisiteur();
		GridBagConstraints gbc_table = new GridBagConstraints();
		gbc_table.gridwidth = 2;
		gbc_table.insets = new Insets(0, 0, 5, 5);
		gbc_table.fill = GridBagConstraints.BOTH;
		gbc_table.gridx = 1;
		gbc_table.gridy = 3;
		JScrollPane scrollPane = new JScrollPane(table);
		getContentPane().add(scrollPane, gbc_table);
		
		
		btnEnregister = new JButton(MessagesUtil.formatMessage("visiteur.ajout.btn.enregistrer"));
		btnEnregister.addActionListener(this);
		GridBagConstraints gbc_btnEnregister = new GridBagConstraints();
		gbc_btnEnregister.anchor = GridBagConstraints.EAST;
		gbc_btnEnregister.insets = new Insets(0, 0, 0, 5);
		gbc_btnEnregister.gridx = 2;
		gbc_btnEnregister.gridy = 5;
		getContentPane().add(btnEnregister, gbc_btnEnregister);
		
		btnAnnuler = new JButton(MessagesUtil.formatMessage("visiteur.ajout.btn.annuler"));
		btnAnnuler.addActionListener(this);
		GridBagConstraints gbc_btnAnnuler = new GridBagConstraints();
		gbc_btnAnnuler.insets = new Insets(0, 0, 0, 5);
		gbc_btnAnnuler.anchor = GridBagConstraints.WEST;
		gbc_btnAnnuler.gridx = 3;
		gbc_btnAnnuler.gridy = 5;
		getContentPane().add(btnAnnuler, gbc_btnAnnuler);
	}
	
	public void update(){
		
		table.setModel(new TableVisiteurModel(listVisiteur, table.getColumnNames()));
		table.setShowGrid(true);
		table.setVisible(true);
		
		this.repaint();
	}



	@Override
	public void actionPerformed(ActionEvent e) {
		
		if(e.getSource() == this.btnEnregister){
			controller.enregistrer(listVisiteur);
		}else if(e.getSource() == this.btnAnnuler){
			update();
		}else if(e.getSource() == this.btnRetourListe){		
			this.dispose();
			controller.retour();
		}else if(e.getSource() == this.btnPlus){
			Visiteur visiteur = new Visiteur(panelPersonne.getSelectedPersonne(), null);
			listVisiteur.add(visiteur);
			controller.ajoutVisiteur(listVisiteur);
		}else if(e.getSource() == this.btnMoins){
			listVisiteur.remove(table.getSelectedRow());
			controller.supprimerVisiteur(listVisiteur);
		}
	}
	
	public List<Visiteur> getListVisiteur() {
		return listVisiteur;
	}

	public void setListVisiteur(List<Visiteur> listVisiteur) {
		this.listVisiteur = listVisiteur;
		
		update();
	}	
}
